// 最低生活保障申请相关API接口
const { request } = require('../utils/request');

/**
 * 提交最低生活保障申请
 * @param {object} data 申请数据
 * @param {number} data.userId 用户ID
 * @param {string} data.applicantName 申请人姓名
 * @param {string} data.applicantIdCard 身份证号
 * @param {string} data.applicantPhone 联系电话
 * @param {string} data.applicantAddress 家庭住址
 * @param {number} data.familySize 家庭人口数
 * @param {number} data.monthlyIncome 家庭月收入
 * @param {string} data.incomeSource 主要收入来源
 * @param {string} data.difficultyReason 困难原因
 * @param {string} data.idCardImage 身份证照片URL
 * @param {string} data.householdImage 户口簿照片URL
 * @param {string} data.incomeProofImage 收入证明照片URL（可选）
 */
function submitApplication(data) {
  return request('/api/min-living-allowance/apply', {
    method: 'POST',
    data: data
  });
}

/**
 * 获取用户的最低生活保障申请列表
 * @param {number} userId 用户ID
 * @param {object} params 查询参数
 * @param {number} params.page 页码，默认为1
 * @param {number} params.limit 每页数量，默认为10
 * @param {string} params.status 状态筛选，可选值：pending、approved、rejected、completed
 */
function getMyApplications(userId, params = {}) {
  // 构建查询参数字符串（微信小程序兼容方式）
  const queryParts = [];
  
  // 添加分页参数
  if (params.page) queryParts.push(`page=${encodeURIComponent(params.page)}`);
  if (params.limit) queryParts.push(`limit=${encodeURIComponent(params.limit)}`);
  if (params.status) queryParts.push(`status=${encodeURIComponent(params.status)}`);
  
  const queryString = queryParts.join('&');
  const url = `/api/min-living-allowance/my-applications/${userId}${queryString ? '?' + queryString : ''}`;
  
  return request(url, {
    method: 'GET'
  });
}

/**
 * 获取申请进度详情
 * @param {number} applicationId 申请ID
 * @param {number} userId 用户ID
 */
function getApplicationDetail(applicationId, userId) {
  return request(`/api/min-living-allowance/progress/${applicationId}?userId=${userId}`, {
    method: 'GET'
  });
}

/**
 * 获取申请详情
 * @param {number} applicationId 申请ID
 * @param {number} userId 用户ID
 * @param {string} userRole 用户角色，默认为'citizen'
 */
function getApplicationDetailInfo(applicationId, userId, userRole = 'citizen') {
  console.log('API调用参数:', { applicationId, userId, userRole });
  const url = `/api/min-living-allowance/detail/${applicationId}?userId=${userId}&userRole=${userRole}`;
  console.log('API请求URL:', url);
  return request(url, {
    method: 'GET'
  });
}

/**
 * 获取所有非管理员用户的申请列表（管理员用）
 * @param {object} params 查询参数
 * @param {number} params.page 页码，默认为1
 * @param {number} params.limit 每页数量，默认为10
 * @param {string} params.status 状态筛选，可选值：pending、approved、rejected、completed
 * @param {string} params.keyword 关键词搜索（姓名、电话、申请编号）
 * @param {string} params.startDate 开始时间
 * @param {string} params.endDate 结束时间
 */
function getAllApplications(params = {}) {
  // 构建查询参数字符串（微信小程序兼容方式）
  const queryParts = [];
  
  // 添加分页参数
  if (params.page) queryParts.push(`page=${encodeURIComponent(params.page)}`);
  if (params.limit) queryParts.push(`limit=${encodeURIComponent(params.limit)}`);
  if (params.status) queryParts.push(`status=${encodeURIComponent(params.status)}`);
  if (params.keyword) queryParts.push(`keyword=${encodeURIComponent(params.keyword)}`);
  if (params.startDate) queryParts.push(`startDate=${encodeURIComponent(params.startDate)}`);
  if (params.endDate) queryParts.push(`endDate=${encodeURIComponent(params.endDate)}`);
  
  const queryString = queryParts.join('&');
  const url = `/api/min-living-allowance/all-applications${queryString ? '?' + queryString : ''}`;
  
  return request(url, {
    method: 'GET'
  });
}

/**
 * 审核申请（通过/驳回）
 * @param {object} data 审核数据
 * @param {number} data.applicationId 申请ID
 * @param {string} data.action 操作类型，'approve'为通过，'reject'为驳回
 * @param {string} data.comment 审核意见
 * @param {number} data.operatorId 操作人ID
 * @param {string} data.operatorName 操作人姓名
 */
function reviewApplication(data) {
  return request('/api/min-living-allowance/review', {
    method: 'POST',
    data: data
  });
}

/**
 * 获取用户待审核、审核中状态的申请总数量
 * @param {number} userId 用户ID
 */
function getUserApplicationCount(userId) {
  return request(`/api/min-living-allowance/count/${userId}`, {
    method: 'GET'
  });
}

/**
 * 获取管理员总处理次数
 * @param {number} adminId 管理员ID
 */
function getAdminProcessCount(adminId) {
  return request(`/api/min-living-allowance/admin/process-count/${adminId}`, {
    method: 'GET'
  });
}

/**
 * 上传单个文件
 * @param {string} filePath 文件路径
 * @param {string} fieldName 字段名，默认为'image'
 */
function uploadFile(filePath, fieldName = 'image') {
  return new Promise((resolve, reject) => {
    // 获取应用实例和baseUrl
    let baseUrl = 'http://localhost:3000';
    try {
      const app = getApp();
      baseUrl = app.globalData?.baseUrl || 'http://localhost:3000';
    } catch (error) {
      console.warn('无法获取app实例，使用默认baseUrl:', error);
      baseUrl = 'http://localhost:3000';
    }
    
    wx.uploadFile({
      url: `${baseUrl}/api/upload/single`,
      filePath: filePath,
      name: fieldName,
      success: (res) => {
        console.log('文件上传响应:', res);
        try {
          const data = JSON.parse(res.data);
          if (data.success) {
            resolve(data);
          } else {
            reject(new Error(data.message || '上传失败'));
          }
        } catch (error) {
          console.error('解析上传响应失败:', error);
          reject(new Error('解析响应数据失败'));
        }
      },
      fail: (error) => {
        console.error('文件上传失败:', error);
        reject(new Error('网络请求失败'));
      }
    });
  });
}

module.exports = {
  submitApplication,
  getMyApplications,
  getApplicationDetail,
  getApplicationDetailInfo,
  getAllApplications,
  reviewApplication,
  getUserApplicationCount,
  getAdminProcessCount,
  uploadFile
};
